计算机系统基础(二)
数据的表示和存储
- 八进制后缀O 十六进制后缀H 或者前缀Ox
- 十进制到二进制转换 通过记住1、24、8、16、32、64、128、256、512、1024、
2048、4096、8192、16382、32768、65536 - 在计算机内部,一个浮点数可以用数的符号、一个定点小数和一个定点整数来表示。
- 原码(Sign and Magnitude)浮点数尾数用原码定点小数表示
- 移码表示 将每一个数值加上一个偏置常数。便于浮点数加减运算时的对阶操作(比较大小)。通常,当编码位数为n时,bias取2n-1或2n-1-1。当bias取2n-1时,移码和补码仅第一位不同,移码用来表示浮点数的阶。
- 补码 (模运算)来表示带符号整数。在一个模运算系统中,一个数与它除以模后的余数等价。一个负数的补码等于将对应正数补码各位取反,末位加一。 一个负数的补码等于模减该负数的绝对值。负数的补码等于对应正数补码各位取反,末位加一。
- 最低有效位 LSB 最高有效位 MSB
- 存储器的编址方式:大端方式和小端方式
运算电路
C语言中的运算
- 算术运算
- 按位运算 对位串实现掩码操作或相应的其他处理(主要用于对多媒体数据或状态/控制信息进行处理)。
- 移位运算 提取部分信息,扩大或缩小2、4、8…倍。
- 逻辑运算 用于关系表达式的运算
- 位扩展和位截断 类型转换
整数加减运算
- 计算机中所有运算都基于加法器实现
- 加法器不知道所运算的的是带符号数还是无符号数
加法器不判定对错,总是取低n位作为结果,并生成标志信息。
溢出公式无符号减公式
- 带符号减公式
- 无符号加公式
- 带符号加公式
乘除运算及浮点数运算
- 整数的乘法运算
整数乘法溢出漏洞
编译器在处理变量和常数相乘时,往往以移位、加位和减法的组合运算来代替乘法运算。
- 整数除法运算
编译器在处理一个变量与一个2的幂次形式的整数相除时,常采用右移运算来实现。
变量与常数之间的除运算
- 浮点数运算
上述过程可能出现的情况
IEEE 754 标准规定的五种异常
- 无效运算(无意义)
- 除以0(即无穷大)
- 数太大(阶上溢)
- 数太小(阶下溢)
- 结果不精确(舍入)